import tkinter as tk
from tkinter import ttk, messagebox
import sqlite3
import csv
from tkcalendar import DateEntry
from tkinter import StringVar, IntVar

def run_treatment12oral():
    global root
    root = tk.Tk()
    root.title("Протокол экспертизы качества оказания медицинской помощи согласно клиническим рекомендациям 2012 - Органы и ткани рта")  # Добавьте эту строку
    # Создание базы данных
    conn = sqlite3.connect('treatment2012.db')
    c = conn.cursor()
    c.execute("""CREATE TABLE IF NOT EXISTS oral2012 (
                ФИО text,
                Год_госпитализации text,
                Дата_рождения text,
                Возраст integer,
                Отделение text,
                Диагноз_МКБ text,
                TNM text,
                Сбор_жалоб text,
                Сбор_анамнеза text,
                Осмотр_пальпация text,
                Пальпация_ЛУ text,
                Оценка_нутритивного_статуса text,
                Развернутый_клинический_анализ_крови text,
                Развернутый_БХ_анализ_крови text,
                Коагулограмма text,
                Общий_анализ_мочи text,
                Патологоанатомическое_исследование_материала text,
                Цитология text,
                Биопсия text,
                Повторная_биопсия text,
                УЗИ_ЛУ_шеи text,
                УЗИ_тканей_дна_рта text,
                УЗИ_органов_брюшной_полости text,
                РГ_грудной_клетки text,
                КТ_МРТ_пораженной_области text,
                КТ_грудной_клетки text,
                ПЭТ_КТ text,
                Анализ_крови_на_антигены text,
                Другие_исследования text,
                Обследование_стоматолога text,
                Обследование_иного_специалиста text,
                Обследование_врача_гинеколога text

                )""")
    conn.commit()

    def submit_data():
        global root  # Добавьте эту строку
            # Получение выбранных жалоб
        tnm = 'T' + tnm_fields['T'].get() + 'N' + tnm_fields['N'].get() + 'M' + tnm_fields['M'].get()
        conn = sqlite3.connect('treatment2012.db')
        c = conn.cursor()
        c.execute("""
        INSERT INTO oral2012 
        (ФИО, Год_госпитализации, Дата_рождения, Возраст, Отделение, Диагноз_МКБ, TNM, Сбор_жалоб, Сбор_анамнеза, Осмотр_пальпация, Пальпация_ЛУ, Оценка_нутритивного_статуса, Развернутый_клинический_анализ_крови, Развернутый_БХ_анализ_крови, Коагулограмма, Общий_анализ_мочи, Патологоанатомическое_исследование_материала, Цитология, Биопсия, Повторная_биопсия, УЗИ_ЛУ_шеи, УЗИ_тканей_дна_рта, УЗИ_органов_брюшной_полости, РГ_грудной_клетки, КТ_МРТ_пораженной_области, КТ_грудной_клетки, ПЭТ_КТ, Анализ_крови_на_антигены, Другие_исследования, Обследование_стоматолога, Обследование_иного_специалиста, Обследование_врача_гинеколога) 
        VALUES 
        (:ФИО, :Год_госпитализации, :Дата_рождения, :Возраст, :Отделение, :Диагноз_МКБ, :TNM, :Сбор_жалоб, :Сбор_анамнеза, :Осмотр_пальпация, :Пальпация_ЛУ, :Оценка_нутритивного_статуса, :Развернутый_клинический_анализ_крови, :Развернутый_БХ_анализ_крови, :Коагулограмма, :Общий_анализ_мочи, :Патологоанатомическое_исследование_материала, :Цитология, :Биопсия, :Повторная_биопсия, :УЗИ_ЛУ_шеи, :УЗИ_тканей_дна_рта, :УЗИ_органов_брюшной_полости, :РГ_грудной_клетки, :КТ_МРТ_пораженной_области, :КТ_грудной_клетки, :ПЭТ_КТ, :Анализ_крови_на_антигены, :Другие_исследования, :Обследование_стоматолога, :Обследование_иного_специалиста, :Обследование_врача_гинеколога)
        """,
                {
                    'ФИО': fields['Фамилия Имя Отчество'].get(),
                    'Год_госпитализации': fields['Год госпитализации'].get(),
                    'Дата_рождения': fields['Дата рождения'].get(),
                    'Возраст': int(fields['Возраст'].get()),
                    'Отделение': fields['Отделение'].get(),
                    'Диагноз_МКБ': fields['Диагноз (МКБ-10)'].get(),
                    'TNM': tnm,
                    'Сбор_жалоб': fields['Сбор жалоб'].get(),
                    'Сбор_анамнеза': fields['Сбор анамнеза'].get(),
                    'Осмотр_пальпация': fields['Осмотр и пальпация очага поражения'].get(),
                    'Пальпация_ЛУ': fields['Пальпация регионарных лимфоузлов'].get(),
                    'Оценка_нутритивного_статуса': fields['Оценка нутритивного статуса'].get(),
                    'Развернутый_клинический_анализ_крови': fields['Развернутый клинический анализ крови'].get(),
                    'Развернутый_БХ_анализ_крови': fields['Развернутый биохимический анализ крови'].get(),
                    'Коагулограмма': fields['Коагулограмма'].get(),
                    'Общий_анализ_мочи': fields['Общий анализ мочи'].get(),
                    'Патологоанатомическое_исследование_материала': fields['Патологоанатомическое исследование операционного материала'].get(),
                    'Цитология': fields['Цитологическое исследование мазков-отпечатков'].get(),
                    'Биопсия': fields['Биопсия для патологоанатомического исследования'].get(),
                    'Повторная_биопсия': fields['Повторная биопсия'].get(),
                    'УЗИ_ЛУ_шеи': fields['УЗИ лимфоузлов шеи'].get(),
                    'УЗИ_тканей_дна_рта': fields['УЗИ тканей дна рта'].get(),
                    'УЗИ_органов_брюшной_полости': fields['УЗИ органов брюшной полости и забрюшинного пространства'].get(),
                    'РГ_грудной_клетки': fields['Рентгенография органов грудной клетки'].get(),
                    'КТ_МРТ_пораженной_области': fields['КТ и/или МРТ пораженной области с внутривенным контрастированием'].get(),
                    'КТ_грудной_клетки': fields['КТ органов грудной клетки с внутривенным контрастированием или без него'].get(),
                    'ПЭТ_КТ': fields['ПЭТ/КТ с флудезоксиглюкозой'].get(),
                    'Анализ_крови_на_антигены': fields['Анализ крови на выявление антител, антигенов к воздбудителями инфекций (ВИЧ, гепатиты, сифилис)'].get(),
                    'Другие_исследования': fields['Иные диагностические исследования'].get(),
                    'Обследование_стоматолога': fields['Обследование у врача-стоматолога'].get(),
                    'Обследование_иного_специалиста': fields['Обследование у иного врача-специалиста'].get(),
                    'Обследование_врача_гинеколога': fields['Обследование у врача-гинеколога'].get(),
                })
        conn.commit()
        conn.close()
        
        # Создание нового окна
        new_window = tk.Toplevel(root)
        new_window.title("Данные отправлены")
        tk.Label(new_window, text="Данные отправлены!").pack()
        tk.Button(new_window, text="Следующий пациент", command=lambda: [clear_fields(), new_window.destroy()]).pack()
        tk.Button(new_window, text="Выход", command=root.quit).pack()

    def clear_fields():
        global root
        for field in fields.values():
            if isinstance(field, (tk.Entry, ttk.Combobox)):
                field.delete(0, 'end')
            elif isinstance(field, tk.IntVar):
                field.set(0)
        for field in tnm_fields.values():
            if isinstance(field, (tk.Entry, ttk.Combobox)):
                field.delete(0, 'end')
            elif isinstance(field, tk.IntVar):
                field.set(0)



    def export_to_csv():
        conn = sqlite3.connect('treatment2012.db')
        c = conn.cursor()
        data = c.execute("SELECT * FROM oral2012").fetchall()
        field_names = [description[0] for description in c.description]
        with open('oral2012.csv', 'w', newline='') as file:
            writer = csv.writer(file)
            writer.writerow(field_names)
            writer.writerows(data)
        conn.close()

    submit_button = tk.Button(root, text="Отправить", command=submit_data)
    export_button = tk.Button(root, text="Экспорт в CSV", command=export_to_csv)
    # Создание списков
    yesorno = ["Да", "Нет"]
    mkb_options = ["C00.0 Злокачественное новообразование наружной поверхности верхней губы", "C00.1 Злокачественное новообразование наружной поверхности нижней губы", "C00.2 Злокачественное новообразование наружной поверхности губы неуточненной", "C00.3 Злокачественное новообразование внутренней поверхности верхней губы", "C00.4 Злокачественное новообразование внутренней поверхности нижней губы", "C00.5 Злокачественное новообразование внутренней поверхности губы неуточненной", 
                "C00.6 Злокачественное новообразование спайки губы", "C00.8 Злокачественное новообразование губы, выходящее за пределы одной и более вышеуказанных локализаций", "C00.9 Злокачественное новообразование губы неуточненной части", "C01 Злокачественные новообразования основания языка", "C02.0 Злокачественное новообразование спинки языка", "C02.1 Злокачественное новообразование боковой поверхности языка", "C02.2 Злокачественное новообразование нижней поверхности языка",
                "C02.3 Злокачественное новообразование передних 2/3 языка неуточненной части", "C02.4 Злокачественное новообразование язычной миндалины", "C02.8 Злокачественное новообразование языка, выходящее за пределы одной и более вышеуказанных локализаций", "C02.9 Злокачественное новообразование языка неуточненной части", "C03.0 Злокачественное новообразование десны верхней челюсти", "C03.1 Злокачественное новообразование десны нижней челюсти",
                "C03.9 Злокачественное новообразование десны неуточненной", "C04.0 Злокачественное новообразование передней части дна полости рта", "C04.1 Злокачественное новообразование боковой части дна полости рта", "C04.8 Злокачественное новообразование дна полости рта, выходящее за пределы одной и более вышеуказанных локализаций",
                "C04.9 Злокачественное новообразование дна полости рта, неуточненное", "C05.0 Злокачественное новообразование твердого неба", "C05.1 Злокачественное новообразование мягкого неба", "C05.2 Злокачественное новообразование язычка", "C05.8 Злокачественное новообразование неба, выходящее за пределы одной и более вышеуказанных локализаций",
                "C05.9 Злокачественное новообразование неба, неуточненное", "C06.0 Злокачественное новообразование слизистой оболочки щеки", "C06.1 Злокачественное новообразование преддверия рта", "C06.2 Злокачественное новообразование ретромолярной области", "C06.8 Злокачественное новообразование других и неуточненных отделов рта, выходящее за пределы одной и более вышеуказанных локализаций", "C06.9 Злокачественное новообразование рта неуточненное", "C07 Злокачественное новообразование околоушной слюнной железы",
                "C08.0 Злокачественное новообразование поднижнечелюстной железы", "C08.1 Злокачественное новообразование подъязычной железы", "C08.8 Злокачественное новообразование больших слюнных желез, выходящее за пределы одной и более вышеуказанных локализаций", "C08.9 Злокачественное новообразование большой слюнной железы неуточненной", "C09.0 Злокачественное новообразование миндаликовой ямочки", "C09.1 Злокачественное новообразование дужки небной миндалины (передней) (задней)", "C09.8 Злокачественное новообразование миндалины, выходящее за пределы одной и более вышеуказанных локализаций",
                "C09.9 Злокачественное новообразование миндалины неуточненной", "C14.8 Злокачественное новообразование губы, полости рта и глотки, выходящее за пределы одной и более вышеуказанных локализаций", "D11.0 Доброкачественное новообразование околоушной слюнной железы", "D11.7 Доброкачественное новообразование других больших слюнных желез", "D11.9 Доброкачественное новообразование большой слюнной железы неуточненное"]
    fields = {
        'Фамилия Имя Отчество': tk.Entry(root, width=80),
        'Год госпитализации': tk.Entry(root, width=80),
        'Дата рождения': DateEntry(root, width=80),
        'Возраст': tk.Entry(root, width=80),
        'Отделение': tk.Entry(root, width=80),
        'Диагноз (МКБ-10)': ttk.Combobox(root, width=80, values = mkb_options),
        'Стадия TNM': None,  # Изменено здесь
        '1. Жалобы и анамнез': None,  # Изменено здесь
        'Сбор жалоб': ttk.Combobox(root, width=80, values = yesorno),
        'Сбор анамнеза': ttk.Combobox(root, width=80, values = yesorno),
        '2. Физикальное обследование': None,  # Изменено здесь
        'Осмотр и пальпация очага поражения': ttk.Combobox(root, width=80, values = yesorno),
        'Пальпация регионарных лимфоузлов': ttk.Combobox(root, width=80, values = yesorno),
        'Оценка нутритивного статуса': ttk.Combobox(root, width=80, values = yesorno),
        '3. Лабораторные диагностические исследования': None,  # Изменено здесь
        'Развернутый клинический анализ крови': ttk.Combobox(root, width=80, values = yesorno),
        'Развернутый биохимический анализ крови': ttk.Combobox(root, width=80, values = yesorno),
        'Коагулограмма': ttk.Combobox(root, width=80, values = yesorno),
        'Общий анализ мочи': ttk.Combobox(root, width=80, values = yesorno),
        'Патологоанатомическое исследование операционного материала': ttk.Combobox(root, width=80, values = yesorno),
        '4. Инструментальные диагностические исследования': None,  # Изменено здесь
        'Цитологическое исследование мазков-отпечатков': ttk.Combobox(root, width=80, values = yesorno),
        'Биопсия для патологоанатомического исследования': ttk.Combobox(root, width=80, values = yesorno),
        'Повторная биопсия': ttk.Combobox(root, width=80, values = yesorno),
        'УЗИ лимфоузлов шеи': ttk.Combobox(root, width=80, values = yesorno),
        'УЗИ тканей дна рта': ttk.Combobox(root, width=80, values = yesorno),
        'УЗИ органов брюшной полости и забрюшинного пространства': ttk.Combobox(root, width=80, values = yesorno),
        'Рентгенография органов грудной клетки': ttk.Combobox(root, width=80, values = yesorno),
        'КТ и/или МРТ пораженной области с внутривенным контрастированием': ttk.Combobox(root, width=80, values = yesorno),
        'КТ органов грудной клетки с внутривенным контрастированием или без него': ttk.Combobox(root, width=80, values = yesorno),
        'ПЭТ/КТ с флудезоксиглюкозой': ttk.Combobox(root, width=80, values = yesorno),
        '5. Иные диагностические исследования': None,  # Изменено здесь
        'Анализ крови на выявление антител, антигенов к воздбудителями инфекций (ВИЧ, гепатиты, сифилис)': ttk.Combobox(root, width=80, values = yesorno),
        'Иные диагностические исследования': tk.Entry(root, width=80),
        '6. Обследование у врачей-специалистов': None,  # Изменено здесь
        'Обследование у врача-стоматолога': ttk.Combobox(root, width=80, values = yesorno),
        'Обследование у иного врача-специалиста': tk.Entry(root, width=80),
        'Обследование у врача-гинеколога': ttk.Combobox(root, width=80, values = yesorno)
    }
    tnm_fields = {  # Добавлено здесь
        'T': tk.Entry(root),
        'N': tk.Entry(root),
        'M': tk.Entry(root)
    }

    # Создание переменных для чекбоксов
    livingtypes = {
        'Город': tk.IntVar(),
        'Село': tk.IntVar(),
        'Деревня': tk.IntVar(),
        'Поселок городского типа': tk.IntVar(),
        'Станица': tk.IntVar()
    }
    habits = {
        'Курение': tk.IntVar(),
        'Алкоголь': tk.IntVar()
    }
    typelesions = {
        'Язва': tk.IntVar(),
        'Образование': tk.IntVar(),
        'Рубец': tk.IntVar()
    }
    supportives = {
        'ИБС': tk.IntVar(),
        'Гипертоническая болезнь': tk.IntVar(),
        'Хронический гастрит': tk.IntVar(),
        'Хронический холицестит': tk.IntVar(),
        'Хронический панкреатит': tk.IntVar(),
        'Язвенная болезнь желудка и двенадцатиперстной кишки': tk.IntVar(),
        'Сахарный диабет': tk.IntVar()
    }
    treatments = {
        'Хирургическое': tk.IntVar(),
        'Дистанционная гамма-терапия': tk.IntVar(),
        'Рентгенотерапия': tk.IntVar(),
        'Быстрые электроны': tk.IntVar(),
        'Контактная гамма-терапия и глубокая рентгенотерапия': tk.IntVar(),
        'Хирургическое и гамма-терапия': tk.IntVar(),
        'Хирургическое и рентгенотерапия': tk.IntVar(),
        'Хирургическое и сочетанное лучевое': tk.IntVar(),
        'Химиопрепаратами': tk.IntVar(),
        'Гормональными препаратами': tk.IntVar(),
        'Паллиативное': tk.IntVar(),
        'Симптоматическое лечение': tk.IntVar()
    }
    complaints = {
        'Образование': tk.IntVar(),
        'Язва': tk.IntVar(),
        'Увеличенный лимфоузел': tk.IntVar(),
        'Боль': tk.IntVar(),
        'Слабость': tk.IntVar()
    }
    extra_rows = 0
    checkbox_fields = ['Жалобы на наличие', 'Тип населенного пункта', 'Вредные привычки', 'Тип образования', 'Сопутствующие', 'Лечение']
    checkbox_vars = [complaints, livingtypes, habits, typelesions, supportives, treatments]
    checkboxes_per_row = [4, 4, 4, 4, 4, 4]  # Можно настроить количество чекбоксов в строке для каждого поля

    for i, (label_text, entry) in enumerate(fields.items()):
        label = tk.Label(root, text=label_text)
        label.grid(row=i + extra_rows, column=0)
        if label_text in checkbox_fields:
            checkbox_index = checkbox_fields.index(label_text)
            checkbox_var = checkbox_vars[checkbox_index]
            checkbox_per_row = checkboxes_per_row[checkbox_index]
            checkbox_row = 0
            checkbox_col = 0
            for j, (checkbox_label, var) in enumerate(checkbox_var.items()):
                tk.Checkbutton(root, text=checkbox_label, variable=var).grid(row=i + checkbox_row + extra_rows, column=checkbox_col+1)
                checkbox_col += 1
                if checkbox_col >= checkbox_per_row:
                    checkbox_col = 0
                    checkbox_row += 1
            extra_rows += checkbox_row
        elif label_text == 'Стадия TNM':
            for j, (tnm_label, tnm_entry) in enumerate(tnm_fields.items(), start=2):
                tk.Label(root, text=tnm_label).grid(row=i + extra_rows, column=j-1,  padx=10, pady=10)
                tnm_entry.grid(row=i + extra_rows, column=j-1, padx=10, pady=10)
        elif entry is not None:  # Проверка на None
            if isinstance(entry, tk.IntVar):
                tk.Checkbutton(root, text=label_text, variable=entry).grid(row=i + extra_rows, column=1)
            else:
                entry.grid(row=i + extra_rows, column=2)

    # Переместите кнопки в конец
    submit_button.grid(row=i + extra_rows + 1, column=1, columnspan=2)
    export_button.grid(row=i + extra_rows + 2, column=1, columnspan=2)

    root.mainloop()



